RML-Core

Draft Community Group Report

Latest published version:
https://www.w3.org/RML-Core/
Latest editor's draft:
https://w3id.org/rml/core/spec
Editors:
Pano Maria (Skemu)
(KU Leuven)
(USC)
Authors:
Pano Maria (Skemu)
(KU Leuven)
Feedback:
GitHub kg-construct/rml-core (pull requests, new issue, open issues)

Abstract

This document describes RML, a generic mapping language, based on and extending R2RML. The RDF Mapping language (RML) is a mapping language defined to express customized mapping rules from heterogeneous data structures and serializations to the RDF RDF-CONCEPTS data model. RML is defined as a superset of the W3C-standardized mapping language R2RML, aiming to extend its applicability and broaden its scope, adding support for data in other structured formats. R2RML is the W3C standard to express customized mappings from relational databases to RDF. RML follows exactly the same syntax as R2RML; therefore, RML mappings are themselves RDF graphs. The present document describes the RML-Core language and its concepts through definitions and examples.

Status of This Document

This specification was published by the Knowledge Graph Construction Community Group. It is not a W3C Standard nor is it on the W3C Standards Track. Please note that under the W3C Community Contributor License Agreement (CLA) there is a limited opt-out and other conditions apply. Learn more about W3C Community and Business Groups.

GitHub Issues are preferred for discussion of this specification.

1. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words MAY, MUST, MUST NOT, OPTIONAL, SHOULD, and SHOULD NOT in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

2. RML Overview and Example

This section is non-normative.

This section gives a brief overview of the RML mapping language, followed by a simple example of JSON documents with an RML mapping document and its output RDF. Further RML examples can be found in the RML-core test-cases.

An RML mapping refers to logical sources to retrieve data from the input data source.

Each logical source is mapped to RDF using a triples map. The triples map is a rule that maps each iteration in the logical source to a number of RDF triples. The rule has two main parts:

  1. A subject map that generates the subject of all RDF triples that will be generated from a logical source iteration. The subjects often are IRIs.
  2. Multiple predicate-object maps that in turn consist of predicate maps and object maps (or referencing object maps).

Triples are produced by combining the subject map with a predicate map and object map, and applying these three to each logical iteration. For example, the complete rule for generating a set of triples might be:

Subjects: A template http://data.example.com/image/{ID} is used to generate subject IRIs from the ID name. Predicates: The constant vocabulary IRI ex:title is used. Objects: The value of the Title name is used to produce an RDF literal.

By default, all RDF triples are in the default graph of the output dataset. A triples map can contain graph maps that place some or all of the triples into named graphs instead.

An overview of the RML vocabulary is shown in Figure 1:

RML-Core vocabulary
Figure 1 RML-Core vocabulary

2.1 Example input data sources

Note

3. RML Mapping Documents

3.1 RML Mapping

An RML mapping defines a mapping from a data source to RDF. It is a structure that consists of one or more triples maps.

The input to an RML mapping is a data source called the input data source.

3.2 Mapping Graphs and the RML Vocabulary

An RML mapping is represented as an RDF graph. In other words, RDF is used not just as the target data model of the mapping, but also as a formalism for representing the RML mapping itself.

An RDF graph that represents an RML mapping is called an RML mapping graph.

The RML vocabulary is the set of IRIs defined in this specification that start with the rml: as prefix and uses namespace IRI: http://w3id.org/rml/

An RML mapping graph:

  1. SHOULD NOT include any IRIs that start with the rml: namespace IRI, but are not defined in the RML vocabulary.
  2. SHOULD NOT include IRIs from the RML vocabulary where such use is not explicitly allowed or required by a clause in this specification.
  3. SHOULD contain only mapping components that are referenced by some triples map (in other words, all mapping components should actually be “used” in the mapping).
  4. MAY contain arbitrary additional triples whose terms are not from the RML vocabulary. In particular, a valid mapping graph MAY contain documentation in the form of rdfs:label, rdfs:comment and similar properties.
  5. MAY assign IRIs or blank node identifiers to any mapping component in order to enable reuse of mapping components within the mapping graph. For example, an IRI that represents a subject map may be used as the [subject= map=] of multiple triples maps; and may even be used as an object map of another triples map if it has the right properties.

The RML vocabulary also includes the following RML classes:

The members of these classes are collectively called mapping components.

Note

Explicit typing of the resources in a mapping graph with RML classes is OPTIONAL and has no effect on the behaviour of an RML processor. The mapping component represented by any given resource in a mapping graph is defined by the presence or absence of certain properties, as defined throughout this specification. A resource SHOULD NOT be typed as an RML class if it does not meet the definition of that class.

3.3 RDF-based Turtle Syntax; Media Type

An RML mapping document is any document written in the Turtle [TURTLE] RDF syntax that encodes an RML mapping graph.

The media type for RML mapping documents is the same as for Turtle documents in general: text/turtle. The content encoding of Turtle content is always UTF-8 and the charset parameter on the media type SHOULD always be used: text/turtle;charset=utf-8. The file extension .ttl SHOULD be used.

A conforming RML processor SHOULD accept RML mapping documents in Turtle syntax. It MAY accept RML mapping graphs encoded in other RDF syntaxes.

4. RML Processors, Validators and Generators

4.1 RML Processor

An RML processor is a system that, given an RML mapping and an input data source, provides access to the output dataset.

The process of generating the output dataset by an RML processor is called the RML mapping process.

There are no constraints on the method of access to the output dataset provided by a conforming RML processor. An RML processor MAY materialize the output dataset into a file, or offer virtual access through an interface, or offer any other means of providing access to the output dataset.

An RML processor also has access to an execution environment consisting of:

How the logical source is accessed, or how users are authenticated against the database, is outside of the scope of this document.

The base IRI MUST be a valid IRI. It SHOULD NOT contain question mark ("?") or hash ("#") characters and SHOULD end in a slash ("/") character.

Note

4.2 RML Validator

An RML data validator is a system that takes as its input an RML mapping, a base IRI, and one or more data sources, and checks for the presence of data errors. A data validator MUST report any data errors that are raised in the mapping process.

An RML processor MAY include an RML data validator, but this is not required.

4.3 Data Errors

A data error is a condition of the data in the input data source that would lead to the generation of an invalid RDF term. The following conditions give rise to data errors:

  1. A term map with term type rml:IRI results in the generation of an invalid IRI.
  2. A term map whose natural RDF datatype is overridden with a specified datatype produces an ill-typed literal (see datatype-override RDF literal).

When providing access to the output dataset, an RML processor MUST abort any operation that requires inspecting or returning an RDF term whose generation would give rise to a data error, and report an error to the agent invoking the operation. A conforming RML processor MAY, however, allow other operations that do not require inspecting or returning these RDF terms, and thus MAY provide partial access to an output dataset that contains data errors. Nevertheless, an RML processor SHOULD report data errors as early as possible.

The presence of data errors does not make an RML mapping non-conforming.

Note

5. Defining Iterables and Logical Sources

An iterable is an abstract construct to describe data access and iteration for a data source.

An iterable (rml:Iterable) MUST have:

A logical iteration is an item in the sequence produced by the iterable, on which expressions can be evaluated.

A data source is an abstract concept that represents a source of data that can be accessed via a iterable. A data source can be a file, a database, a web service, or any other source of data, depending on the type of iterable.

Note

An abstract logical source (rml:AbstractLogicalSource) is a sub-class of iterable that can be associated with a triples map such that a data source can be mapped to RDF triples.

6. Mapping to RDF with Triples Maps

A triples map specifies a set of rules for translating each iteration of a logical source to zero or more RDF triple.

All RDF triples generated from one logical iteration in the logical source share the same subject.

A triples map is represented by a resource that references the following other resources:

Note

6.1 Creating Resources with Subject Maps

A subject map is a term map. It specifies a rule for generating the subjects of the RDF triples generated by a triples map.

6.2 Typing Resources (rml:class)

A subject map MAY have one or more class IRIs. They are represented by the rml:class property. The values of the rml:class property MUST be IRIs. For each RDF term generated by the subject map, RDF triples with predicate rdf:type and the class IRI as object will be generated.

Note

6.3 Creating Properties and Values with Predicate-Object Maps

A predicate-object map is a function that creates one or more predicate-object pairs for each logical iteration of a logical source. It is used in conjunction with a subject map to generate RDF triples in a triples map.

A predicate-object map is represented by a resource that references the following other resources:

A predicate map is a term map.

An object map is a term map.

7. Generating values with expressions

Expressions are mapping constructs that can be evaluated on a logical iteration, according to the specified reference formulation, to generate values during the mapping process.

7.1 Expression map (rml:ExpressionMap)

An expression map (rml:ExpressionMap) is an abstract class, that is specialized by other RML classes. An expression map MUST have one the following properties:

Each of these properties specifies an expression which, upon evaluation, results in an ordered list of values, called the expression evaluation result.

The reference expression set of an expression map is the set of expressions which are evaluated on a logical iteration.

7.1.1 Constant expression (rml:constant)

A constant-valued expression map is an expression map that always generates the same expression evaluation result. A constant-valued expression map is represented by a resource that has exactly one rml:constant property, the value of which is called a constant expression.

The constant value is a singleton list containing the constant expression.

The reference expressions of a constant-valued expression map is an empty list.

7.1.2 Reference (rml:reference)

A reference-valued expression map is an expression map that is represented by a resource that has exactly one rml:reference property, the value of which is called a reference expression.

The reference expression MUST be a valid expression according to the defined reference formulation in the logical source.

The reference expression set of a reference-valued expression map is the singleton set containing the reference expression.

The reference value is the expression evaluation result obtained by evaluating the reference expression against a given logical iteration.

7.1.3 Template (rml:template)

A template-valued expression map is an expression map that is represented by a resource that has exactly one rml:template property, the value of which is called a template expression. The template expression MUST be a valid string template.

A string template is a format string that can be used to build strings from multiple components. It can apply reference expressions by enclosing them in curly braces ({ and }). The following syntax rules apply to valid string templates:

  • Pairs of unescaped curly braces MUST enclose valid reference expressions.
  • Curly braces that do not enclose reference expressions MUST be escaped by a backslash character (\). This also applies to curly braces within reference expressions.
  • Backslash characters (\) MUST be escaped by preceding them with another backslash character, yielding (\\). This also applies to backslashes within reference expressions.
  • There SHOULD be at least one pair of unescaped curly braces.

The reference expression set of a template expression is the set of reference expressions enclosed in unescaped curly braces in the string template.

Sub classes of template-valued expression maps MAY define a reference value transforming function which will be applied to each reference value when evaluating the template.

The template value when evaluating a string template for a given logical iteration is determined as follows:

  1. Let result be the reference expression set of the string template
  2. For each reference expression in result:
    1. Let values be the reference value of the reference expression that is enclosed in the curly braces
    2. If values is an empty list, then return NULL
    3. For each value in values:
      1. Let value be the natural RDF lexical form corresponding to value
  3. Let result be the n-ary Cartesian product of result
  4. For each ordered list product in result:
    1. Let template be the string template
    2. For each pair of unescaped curly braces in template:
      1. Let value be the value at the index of product corresponding with the index of value in template
      2. If a reference value transforming function is applicable, let value be the value after applying the reference value transforming function
      3. Replace the pair of curly braces with value
    3. Let product be template
  5. Return result

8. Term Maps

An RDF term is either an IRI, or a blank node, or a literal.

A term map (rml:TermMap) is a rule that defines how to generate an RDF term from a logical iteration. The result of the execution of that rule is the generated RDF term.

A term map is a sub-class of an expression map.

Term maps (rml:TermMap) are used to generate the subjects, predicates and objects of the RDF triples that are generated by a triples map (rml:TriplesMap). Consequently, there are several kinds of term maps (rml:TermMap). Depending on where in the mapping they occur, a term map (rml:TermMap) can be:

A term map generates different types of RDF terms depending on the position of the term map in the RDF triple:

A term map MUST have

8.1 Constant RDF Terms (rml:constant)

A constant-valued term map is a term map that ignores the logical iteration and always generates the same RDF term. A constant-valued term map is a constant-valued expression map, and is thus represented by a resource that has exactly one rml:constant property. The constant expression MUST be a valid RDF term.

The constant value of the rml:constant property is the generated RDF Term.

8.1.1 Shortcuts for constant-valued term maps

Constant-valued term maps can be expressed more concisely using the constant shortcut properties rml:subject, rml:predicate, rml:object, and rml:graph for the term maps, and rml:datatype and rml:language for the datatype map and language map respectively. Occurrences of these properties MUST be treated exactly as if the following triples were present in the mapping graph instead:

Triple involving constant shortcut property Replacement triples
?x rml:subject ?y. ?x rml:subjectMap [ rml:constant ?y ].
?x rml:predicate ?y. ?x rml:predicateMap [ rml:constant ?y ].
?x rml:object ?y. ?x rml:objectMap [ rml:constant ?y ].
?x rml:graph ?y. ?x rml:graphMap [ rml:constant ?y ].
?x rml:datatype ?y. ?x rml:datatypeMap [ rml:constant ?y ].
?x rml:language ?y. ?x rml:languageMap [ rml:constant ?y ].

8.2 Reference (rml:reference)

A reference-valued term map is a reference-valued expression map, and is thus represented by a resource that has exactly one rml:reference property.

The evaluation of a reference-valued expression map against a given logical iteration produces a reference value. For each value in the list, an RDF term is created. If the reference value is an empty list, then there will be no generated RDF term.

8.3 Template (rml:template)

A template-valued term map is a template-valued expression map, and is thus represented by a resource that has exactly one rml:template property.

If the template value returned by the template-valued expression map is an empty list, no RDF term will be created.

8.3.1 IRI encoding

If the term type of the template-valued term map is rml:IRI, then a reference value transforming function MUST be applied during the evaluation of the template expression. The reference value transforming function MUST transform a reference value into an IRI-safe version of that value.

The IRI-safe version of a string is obtained by applying the following transformation to any character that is not in the iunreserved production in [RFC3987]:

  1. Convert the character to a sequence of one or more octets using UTF-8 [RFC3629]
  2. Percent-encode each octet [RFC3986]

The following table shows examples of strings and their IRI-safe versions:

String IRI-safe version
42 42
Hello World! Hello%20World%21
2011-08-23T22:17:00Z 2011-08-23T22%3A17%3A00Z
~A_17.1-2 ~A_17.1-2
Note
Note

8.4 IRIs, Literal, Blank Nodes (rml:termType)

The term type of a reference-valued term map or template-valued term map determines the kind of generated RDF term (IRIs, blank nodes or literals).

If the term map has an optional rml:termType property, then its term type is the value of that property. The value MUST be an IRI and MUST be one of the following options:

8.4.1 Default Term Types

If the term map does not have a rml:termType property, then its term type is:

8.4.2 Explicitly Defined Term Types

To change the default term type of a subject map or graph map to a blank node, the term type MUST be explicitly defined to be a rml:BlankNode.

To change the default term type of an object map, the term type MUST be explicitly defined:

If the term type is explicitly defined to be a rml:BlankNode, a term map MAY not have an expression map. Then an RML Processor MUST generate a random value for the blank node.

Note
Note
Note

8.5 Language tags (rml:languageMap and rml:language)

A language-taggable term map is a term map with a term type of rml:Literal that does not have a specified datatype map.

A language-taggable term map MAY be associated with a language map.

A language map (rml:LanguageMap) is an expression map. It specifies a rule for generating one or more language tags for a language-taggable term map. Following [rdf11-concepts-20140225], the generated language tags MUST be well-formed according to [BCP47].

Given the list of values resulting from a language-taggable term map T, and the list of values resulting from its language map L, the resulting terms are generated by the n-ary Cartesian product combination of T × L, where the values in T are the lexical forms, and the values in L are the non-empty language tags.

Each combination of T × L causes the generation of a language-tagged string.

8.6 Datatypes of Literals (rml:datatypeMap and rml:datatype)

A datatypeable term map is a term map with a term type of rml:Literal that does not have a specified language map.

Datatypeable term maps MUST generate zero or more literals. The datatype of these literals can be automatically determined with a natural mapping (producing a natural RDF literal), or it can be explicitly specified using a datatype map (producing a datatype-override RDF literal).

A datatype map (rml:DatatypeMap) is an expression map. It specifies a rule for generating one or more datatypes of a datatypeable term map. A datatype map MUST generate a list of IRI values, in which the IRIs are the datatype IRIs of the datatypeable term map.

Given the list of values resulting from a datatypeable term map T, and the list of values resulting from its datatype map D, the resulting terms are generated by the n-ary Cartesian product combination of T × D, where the values in T are the literal values, and the values in D are the datatype IRIs.

A datatypeable term map MUST have zero or one datatype maps, which can be specified in two ways:

  1. using the rml:datatypeMap property, whose value MUST be a datatype map, or
  2. using the constant shortcut property rml:datatype.

A term map that is not a datatypeable term map MUST NOT have an rml:datatypeMap or rml:datatype property.

See generated RDF term for further details on generating literals from term maps.

Note

9. Joins

A referencing object map allows using the subject generated by the subject map (rml:SubjectMap) of the referenced triples map (rml:TriplesMap). Since the two triples maps may be based on different logical sources (rml:LogicalSource), this may require a join between the logical sources. This is not restricted to 1:1 joins.

9.1 Referencing Object Map

A referencing object map (rml:ReferencingObjectMap) is represented by a resource that MUST have:

The referencing object map causes the generation of new object which is constructed with the subject generated by evaluating the parent triples map.

9.2 Join Condition

A join condition is represented by a resource that has exactly one value for each of the following two properties:

If the the logical source of the triples map that contains the referencing object map and the logical source of the referencing object map's parent triples map are not effectively equal, then the referencing object map MUST have one or more join conditions.

A join condition is satisfied if the result of evaluating the child map against the logical source of the current triples map is equal to the result of evaluating the parent map against the logical source of the referenced triples map.

If a referencing object map has multiple join conditions, then all of them MUST be satisfied for the referencing object map to be evaluated.

A mapping component is effectively equal to another mapping component if they are identical, or if all their corresponding effective properties have the same values, recursively comparing values that are resources that have properties as well.

An effective property of a mapping component is a property that has an effect on the mapping process.

Note

9.2.1 Shortcuts for reference-valued child map and parent map

If the child map is a reference-valued expression map, then the rml:child shortcut could be used.

Similarly, if the parent map is a reference-valued expression map, then the rml:parent shortcut could be used.

Occurrences of these properties MUST be treated exactly as if the following triples were present in the mapping graph instead:

Triple involving reference shortcut property Replacement triples
?x rml:child ?y. ?x rml:childMap [ rml:reference ?y ].
?x rml:parent ?y. ?x rml:parentMap [ rml:reference ?y ].

10. Assigning Triples to Named Graphs

Each triple generated from an RML mapping is placed into one or more graphs of the output dataset. Possible target graphs are the unnamed default graph, the IRI-named named graphs, and blank node named named graphs

Any subject map or predicate-object map MUST have zero or more associated graph maps. They are specified in one of two ways:

  1. using the rml:graphMap property, whose value MUST be a graph map,
  2. using the constant shortcut property rml:graph.

Graph maps are themselves term maps. When RDF triples are generated, the set of target graphs is determined by taking into account any graph maps associated with the subject map or predicate-object map.

If a graph map generates the special IRI rml:defaultGraph, then the target graph is the default graph of the output dataset.

11. Datatype conversions

For each reference formulation there may be a set of defined natural RDF mappings that are applied to the expression evaluation results on the data source. These natural mappings are defined in the [RML-IO-Registry] and are used to convert the values of the expression evaluation result to the appropriate natural RDF literal corresponding with the reference formulation.

11.1 Natural mapping of source values

The natural RDF literal is a literal obtained by applying a natural mapping on a value from a data source, resulting in the most appropriate representation of that value in RDF. The natural RDF literal has a natural RDF lexical form.

The natural RDF lexical form is the lexical form of the literal on which implementations SHOULD apply the XSD canonical mapping, making it a canonical RDF lexical form. It is used in RML when non-string expression evaluation results are used in a string context, for example when a timestamp is used in an template-valued term map with term type IRI.

The canonical RDF lexical form is the lexical form of the literal on which the XSD canonical mapping MUST be applied.

Cast to string is an implementation-dependent function that maps values from expression evaluation results to equivalent Unicode strings. The specifics of cast to string per reference formulation are defined in the [RML-IO-Registry].

Additionally, the natural mapping determines the natural RDF datatype of the literal.

The natural RDF datatype is the datatype corresponding to the natural RDF literal that is the result of the natural mapping. The natural RDF datatype is an IRI that represents the datatype of the value in RDF.

11.2 Datatype-override mapping of source values

The datatype-override RDF literal corresponding to an expression evaluation result value v and a datatype IRI dt, is a literal whose lexical form is the natural RDF lexical form corresponding to v, and whose datatype IRI is dt. If the literal is ill-typed, then a data error is raised.

A literal is ill-typed in RML if its datatype IRI denotes a validatable RDF datatype and its lexical form is not in the lexical space of the RDF datatype identified by its datatype IRI.

The set of validatable RDF datatypes includes all datatypes in the RDF datatype column of Table 1, as defined in [XMLSCHEMA11-2]. This set MAY include implementation-defined additional RDF datatypes.

For example, "X"^^xsd:boolean is ill-typed because xsd:boolean is a validatable RDF datatype in RML, and "X" is not in the lexical space of xsd:boolean [XMLSCHEMA11-2].

11.3 Summary of XSD Lexical Forms

This section is non-normative.

The natural mappings make reference to various XSD datatypes and require that values from expression evaluation results be converted to strings that are appropriate as lexical forms for these datatypes. This subsection gives examples of these lexical forms in order to aid implementers of the mappings. This subsection is non-normative; the normative definitions of the lexical spaces as well as the canonical mappings are found in [XMLSCHEMA11-2].

A general approach that may be used for implementing the natural mappings is as follows:

  1. Identify the source datatype of value of the expression evaluation result on the data source.
  2. Look up its corresponding natural RDF datatype for the reference formulation in the [RML-IO-Registry].
  3. Apply cast to string to the value.
  4. Ensure that the resulting string is in the lexical space of the target RDF datatype; that is, it must be in a form such as those listed in either column of Table 1 below. This may require some transformations of the string, in particular for xsd:hexBinary, xsd:dateTime and xsd:boolean.
  5. If the goal is to obtain a canonical RDF lexical form, then further string transformations may be required to obtain a form such as those listed in the Canonical lexical forms column of Table 1 below.
Table 1 Table of canonical and non-canonical lexical forms for some XSD datatypes
RDF datatype Non-canonical lexical forms Canonical lexical forms Comments
xsd:hexBinary 5232524d4c 5232524D4C Convert from SQL by applying xsd:hexBinary lexical mapping.
xsd:decimal .224 0.224
+001 1
42.0 42
-5.9000 -5.9
xsd:integer -05 -5
+333 333
00 0
xsd:double -5.90 -5.9E0 Also supports INF, -INF, NaN and -0.0E0,
but these do not appear in standard SQL.
+0.00014770215000 1.4770215E-4
+01E+3 1.0E3
100.0 1.0E2
0 0.0E0
xsd:boolean 1 true Must be lowercase.
0 false
xsd:date 2011-08-23 Dates in SQL don't have timezone offsets.
They are optional in XSD.
xsd:time 22:17:34.885+00:00 22:17:34.885Z May or may not have timezone offset.
22:17:34.000 22:17:34
22:17:34.1+01:00 22:17:34.1+01:00
xsd:dateTime 2011-08-23T22:17:00.000+00:00 2011-08-23T22:17:00Z May or may not have timezone offset.
Convert from SQL by replacing space with "T".

12. The Output Dataset

The output dataset of an RML mapping is an RDF dataset that contains the generated RDF triples for each of the triples maps of the RML mapping. The output dataset MUST NOT contain any other RDF triples or named graphs besides these. However, RML processors MAY provide access to datasets that contain additional triples or graphs beyond those in the output dataset, such as inferred triples or provenance information.

Conforming RML processors MAY rename blank nodes when providing access to the output dataset. This means that client applications may see actual blank node identifiers that differ from those produced by the RML mapping. Client applications SHOULD NOT rely on the specific text of the blank node identifier for any purpose.

Note
Note

13. Definitions

n-ary Cartesian product

Given set 𝑋₁, ..., 𝑋ₙ, the n-ary Cartesian product over n sets 𝑋₁, ..., 𝑋ₙ, denoted 𝑋₁ × ... × 𝑋ₙ, is defined as the set of all ordered lists of n elements (𝑥₁ , ... , 𝑥ₙ) such that 𝑥ₙ belongs to 𝑋ₙ.
For example, if A = {1, 2}, B = {a, b, c}, and C = {Z}, then the n-ary Cartesian product of A, B and C is {(1, a, Z), (1, b, Z), (1, c, Z), (2, a, Z), (2, b, Z), (2, c, Z)}.

14. RDF Terminology

This section is non-normative.

This section lists some terms normatively defined in [RDF11-CONCEPTS] and used in RML:

15. XML Schema Definition Language (XSD) Terminology

This section is non-normative.

This section lists some terms normatively defined in [XMLSCHEMA11-2] and used in RML:

A. References

A.1 Normative references

[BCP47]
Tags for Identifying Languages. A. Phillips, Ed.; M. Davis, Ed. IETF. September 2009. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc5646
[rdf11-concepts-20140225]
RDF 1.1 Concepts and Abstract Syntax. Richard Cyganiak; David Wood; Markus Lanthaler. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC3629]
UTF-8, a transformation format of ISO 10646. F. Yergeau. IETF. November 2003. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3629
[RFC3986]
Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee; R. Fielding; L. Masinter. IETF. January 2005. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3986
[RFC3987]
Internationalized Resource Identifiers (IRIs). M. Duerst; M. Suignard. IETF. January 2005. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc3987
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[RML-IO-Registry]
RML-IO Registry. KGC-CG. 31 March 2025. Draft Community Group Report. URL: http://w3id.org/rml/rml-io-registry
[TURTLE]
RDF 1.1 Turtle. Eric Prud'hommeaux; Gavin Carothers. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/turtle/
[XMLSCHEMA11-2]
W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. David Peterson; Sandy Gao; Ashok Malhotra; Michael Sperberg-McQueen; Henry Thompson; Paul V. Biron et al. W3C. 5 April 2012. W3C Recommendation. URL: https://www.w3.org/TR/xmlschema11-2/

A.2 Informative references

[RDF11-CONCEPTS]
RDF 1.1 Concepts and Abstract Syntax. Richard Cyganiak; David Wood; Markus Lanthaler. W3C. 25 February 2014. W3C Recommendation. URL: https://www.w3.org/TR/rdf11-concepts/
[RML-IO]
RML-IO. W3C. 12 February 2025. Draft Community Group Report. URL: https://w3id.org/rml/io/spec